Micron Document
πŸŽ–οΈGitΠ―Ρ€Π°πŸŽ–οΈ

Node / reticulum / pip-rns rns://bfb3becae4b7568796ac5276b6bc5741/reticulum/pip-rns


Install Python packages over Reticulum from rngit remotes


>pip-rns

Install Python packages over Reticulum from remotes you choose, and share integrity-backed offline wheel bundles (.opip) for sneakernet / air-gap paths.

You pick every source. There is no default vendor index. Indexes and aliases are opt-in. PyPI, HTTPS git, and system pip remain available as bridges when you need them, not as the center of the design.

rngit page (optional peer docs):

T282828
132f67e79d9b24aad014e93015fb858f:/page/index.mu

Read the docs at pip-rns.quad4.io (or docs/ in the repo).

Tools

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Tool β”‚ Purpose β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ pip-rns / pipx-rns β”‚ Install from Reticulum rngit remotes via pip, pipx, uv, or poetry β”‚
β”‚ opip β”‚ Build, verify, and install offline .opip bundles for USB / air-gap β”‚
β”‚ opip.pyz / pip-rns.pyz β”‚ Standalone zipapps (no prior pip). Run make pyz β”‚
β”‚ opip kit β”‚ One-command USB kit with optional portable CPython β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Both CLIs ship in this package. opip uses only the Python standard library (no extra dependencies).

T282828
opip Tffa657help airgap
pip-rns Tffa657help bootstrap


Choose your sources

1. Sneakernet first-class: build or export a bundle, copy offline, verify, install.
2. Release wheel over RNS: prefer signed rngit releases (cheaper than a full source clone).
3. Source clone: expensive on RNS. Cached and updated when possible. Confirm before the first pull.
4. Indexes (optional): register peer package lists you trust. None are shipped pre-selected.

T282828
T8b949e# Offline / USB
opip create -r requirements.txt -o ./pkg.opip
opip Tffa657export ./pkg.opip -o /media/usb/pkg.opip
opip verify /media/usb/pkg.opip --require-signature
opip install /media/usb/pkg.opip

T8b949e# Mirror a release wheel for sneakernet
pip-rns Tffa657export rns://identity/group/repo --ref v1.0.0 -o /media/usb/mirror
pip-rns install /media/usb/mirror/pkg-1.0.0-py3-none-any.whl

T8b949e# Online: browse mesh, install by short name
pip-rns browse --install
pip-rns install lxmfy
pip-rns search lxm

T8b949e# Or step by step
pip-rns discover --seconds T79c0ff60 --save --scan
pip-rns install lxmfy

T8b949e# Pin or remember publisher
pip-rns trust add rns://identity/group/repo e46112d44649266d71fe2193e00a4710
pip-rns install --from-release rns://identity/group/repo --ref v1.0.0
pip-rns install --offline rns://identity/group/repo T8b949e# cache hit only


pip-rns

Features

β€’ Multi-backend install with pip, pipx, uv, or poetry
β€’ Version pinning and release wheels (prefer --from-release over a full clone)
β€’ Trust store for publisher identities, fail-closed signed releases
β€’ Offline cache / local paths, export for USB, editable checkouts
β€’ Aliases, opt-in indexes, discover / browse / search on the mesh
β€’ Local wheel install from USB paths

T282828
pipx-rns install repo@v1.0.0
pip-rns install --from-release rns://id/group/repo --ref v1.0.0
pip-rns trust add rns://id/group/repo e46112d44649266d71fe2193e00a4710
pip-rns Tffa657export rns://id/group/repo --ref v1.0.0 -o /media/usb/mirror
pip-rns browse --install


Requirements

β€’ python 3.8 or higher

Install

Install from local wheel:

T282828
pip install pip_rns-*.whl

From Source (rngit)

T282828
git clone rns://06a54b505bb67b25ef3f8097e8001edc/public/pip-rns
Tffa657cd pip-rns
make
make install


Bridge: PyPI (optional HTTPS path)

T282828
pip install pip-rns
T8b949e# or
pipx install pip-rns


Bridge: git over HTTPS

T282828
pip install git+https://github.com/Quad4-Software/pip-rns

Verify Releases

T282828
rnid -i e46112d44649266d71fe2193e00a4710 -V pip_rns-*.rsg

Usage

T282828
pipx-rns install 06a54b505bb67b25ef3f8097e8001edc/public/LXMFy
T8b949e# or
pipx-rns install 06a54b505bb67b25ef3f8097e8001edc/public/LXMFy@v1.6.3
T8b949e# branch (clones source. no release probe)
pip-rns install rns://7649a50d84610232d1416b41d2896aff/reticulum/reticulum@master


Adding an index (opt-in peer list)

T282828
pip-rns index add rns://identity/group/index
pip-rns index list

You choose which indexes to trust. None are added automatically.

Commands

pip-rns (generic)

T282828
pip-rns [install] <identity/group/repo> [--from-release|--from-source|-s] [--require-release]
[--offline] [--insecure] [--verify IDENTITY] [--yes|-y]
[--pipx] [--uv] [--poetry] [--ref TAG] [--editable] [--use-cache]
[--venv PATH] [--remember-venv] [-- <tool flags>]
pip-rns browse [--seconds N] [--install] [--auto-alias] [--no-listen] [--no-scan]
pip-rns search <query>
pip-rns help [COMMAND] [-i]
pip-rns update <remote> [options]
pip-rns export <remote> -o DIR [--ref TAG] [--verify IDENTITY] [--all]
pip-rns list [--pipx] [--uv] [--poetry]
pip-rns uninstall <package> [--pipx] [--uv] [--poetry]
pip-rns alias add|set|rm|ls
pip-rns trust add|rm|ls|set-default|forget-default
pip-rns discover [listen|ls|clear|scan|packages] [--seconds N] [--save] [--scan]
pip-rns index add|rm|ls|sync|list|search
pip-rns release list|view
pip-rns venv list|set|forget
pip-rns bundle install|verify
pip-rns doctor [--fix] [--online --remote RNS_URL]
pip-rns completion install [--shell bash|zsh|fish]

pip-rns rns://id/group/repo is shorthand for install. With no @ref / mode flags on a TTY, you get a menu (latest release preferred, source clone labeled expensive, pick a release). Install prefers a release wheel when one exists. Branch-like refs such as @master or @main clone from source. RNS source installs reuse ~/.local/share/pip-rns/cache. Indexes are opt-in.

T282828
pip-rns install --from-source rns://id/group/repo
pip-rns install --from-release rns://id/group/repo --ref v1.0.0
pip-rns install --offline rns://id/group/repo
Te6edf3PIP_RNS_NO_CACHETff7b72=T79c0ff1 pip-rns install rns://id/group/repo


pipx-rns (pipx-specific)

T282828
pipx-rns install <remote> [--ref TAG] [--editable] [--from-release|--from-source]
[--require-release] [--offline] [--insecure] [--verify IDENTITY] [--yes]
pipx-rns inject <venv> <remote>
pipx-rns update <remote>
pipx-rns list
pipx-rns uninstall <package>
pipx-rns doctor [--online]
pipx-rns completion install

Releases

Install pre-built .whl from an rngit release (faster, no build step):

T282828
pip-rns install --from-release rns://06a54b505bb67b25ef3f8097e8001edc/public/rns-page-node --ref v1.6.0

Require a specific release signer when installing (or save it with pip-rns trust):

T282828
pip-rns install --from-release rns://id/group/repo --ref v1.0.0 --verify e46112d44649266d71fe2193e00a4710
pip-rns trust add rns://id/group/repo e46112d44649266d71fe2193e00a4710

List, view, and export releases:

T282828
pip-rns release list rns://06a54b505bb67b25ef3f8097e8001edc/public/rns-page-node
pip-rns release view rns://06a54b505bb67b25ef3f8097e8001edc/public/rns-page-node v1.6.0
pip-rns Tffa657export rns://06a54b505bb67b25ef3f8097e8001edc/public/rns-page-node --ref v1.6.0 -o ./mirror


Release artifacts are downloaded via rngit release fetch on the rngit node hosting the repository. Signed releases fail closed if verification is not confirmed unless you pass --insecure.

Aliases

Save long remote paths under a short name:

T282828
pip-rns Tffa657alias add lxmfy 06a54b505bb67b25ef3f8097e8001edc/public/LXMFy
pip-rns Tffa657alias ls
pip-rns install lxmfy


Aliases are stored in ~/.config/pip-rns/aliases (%APPDATA%/pip-rns/aliases on Windows):

T282828
lxmfy=06a54b505bb67b25ef3f8097e8001edc/public/LXMFy

Custom config directory:

T282828
pip-rns --config /path/to/dir Tffa657alias add lxmfy <remote>
Te6edf3PIP_RNS_CONFIGTff7b72=/path/to/dir pip-rns install lxmfy


Trust

T282828
pip-rns trust add rns://id/group/repo e46112d44649266d71fe2193e00a4710
pip-rns trust set-default e46112d44649266d71fe2193e00a4710
pip-rns trust ls

Stored in ~/.config/pip-rns/trust.json. Used automatically when --verify is omitted (unless --insecure).

Discover

rngit nodes announce on the git.repositories aspect. Listen on your local Reticulum stack (requires the rns Python package):

T282828
pip-rns discover --seconds T79c0ff60 --save
pip-rns discover ls


Heard destination hashes can be used as rns://DESTINATION_HASH/group/repo when the path is known. Discovery is passive. You only learn nodes that announce during the listen window.

Scan those nodes for Python packages (Nomad catalog when enabled, common packages index repos, and release .whl checks):

T282828
pip-rns discover --save --scan
T8b949e# or later:
pip-rns discover scan
pip-rns discover packages
pip-rns install lxmfy


Short names from discovery resolve after aliases and registered indexes.

Indexes

Register an index (an rngit repo with a packages file) and install by name:

T282828
pip-rns index add rns://identity/group/index
pip-rns index sync
pip-rns index list
pip-rns install lxmfy

Indexes chain with aliases: local aliases take priority, then synced indexes, then raw path.

Bundles (opip integration)

Install or verify offline .opip bundles using pip-rns aliases and config:

T282828
pip-rns bundle install lxmfy-bundle@v1.0.0 --signer e46112d44649266d71fe2193e00a4710
pip-rns bundle verify ./my-bundle.opip --require-signature

Passthrough

Flags after -- are forwarded to the underlying tool:

T282828
pip-rns install identity/group/repo -- --break-system-packages
pip-rns install --poetry identity/group/repo -- --dev
pipx-rns install identity/group/repo -- --force

pip-rns Environment

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Variable β”‚ Default β”‚ Description β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ PIPRNSPIP β”‚ pip β”‚ pip command β”‚
β”‚ PIPRNSPIPX β”‚ pipx β”‚ pipx command β”‚
β”‚ PIPRNSUV β”‚ uv β”‚ uv command β”‚
β”‚ PIPRNSPOETRY β”‚ poetry β”‚ poetry command β”‚
β”‚ PIPRNSCONFIG β”‚ - β”‚ config directory for aliases β”‚
β”‚ PIPRNSUSE_CACHE β”‚ - β”‚ enable cache (1) β”‚
β”‚ PIPRNSCOLOR β”‚ auto β”‚ auto, always, never (or 0/1) β”‚
β”‚ PIPRNSNO_INTERACTIVE β”‚ - β”‚ disable prompts when set β”‚
β”‚ NO_COLOR β”‚ - β”‚ disable colors (standard) β”‚
β”‚ FORCE_COLOR β”‚ - β”‚ force colors (standard) β”‚
β”‚ CI β”‚ - β”‚ disables prompts and color unless FORCE_COLOR β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Color stays off on classic Windows cmd.exe / PowerShell unless Windows Terminal (WTSESSION), ConEmu/ANSICON, or FORCECOLOR is set. Global flag: --no-interactive. Long RNS waits show a TTY spinner.

T282828
pip-rns install rns://id/group/repo --venv /path --remember-venv
pip-rns venv Tffa657set default /path


opip (offline bundles)

Create and install integrity-backed offline Python wheel bundles (.opip).

Features

β€’ Create integrity-backed bundles from PyPI or a cloned project
β€’ Universal platform packs, verify, export, uninstall / update
β€’ Install from local file, HTTP/HTTPS/FTP/git, or rns://
β€’ Windows file association via register-windows

T282828
manifest.json integrity.json lock.json sbom.json publisher.json
wheels/ requirements.txt
optional .rsg / .rsm when signed or published via rngit release

Quick start

Bundle a cloned project on a connected machine:

T282828
git clone https://github.com/example/some-project.git
Tffa657cd some-project
opip create


Copy the .opip file to the air-gapped machine:

T282828
opip verify my-bundle.opip
opip install my-bundle.opip

Install from an rngit release over Reticulum:

T282828
opip install rns://identity/group/repo@v1.0.0
opip install rns://identity/group/repo@v1.0.0:my-bundle.opip

Manual requirements and platform targeting:

T282828
opip create -o my-bundle.opip -r requirements.txt
opip create -r requirements.txt --python T79c0ff3.12 --platform win_amd64
opip create -r requirements.txt --python T79c0ff3.12 --platform universal


Signed bundles (Reticulum RSG). A present .rsg is verified automatically via the embedded pubkey. Pass --signer to pin a required identity:

T282828
opip keygen -o publisher.rns
opip create -r requirements.txt --publisher Ta5d6ff"My Team" --identity publisher.rns --require-pypi-hash
opip verify shared-bundle.opip
opip verify shared-bundle.opip --signer e46112d44649266d71fe2193e00a4710 --require-signature


Publish a signed bundle as an rngit release (creates .rsm manifest automatically):

T282828
rngit release -i publisher.rns rns://identity/group/repo create v1.0.0:./dist

opip Commands

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Command β”‚ Description β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ create [-o FILE] [-C DIR] [-r REQ.txt] [packages… β”‚ Build a bundle β”‚
β”‚ install SOURCE [--target DIR] [--remember-target… β”‚ Install a bundle β”‚
β”‚ dest list|set|forget β”‚ Remembered install destinations per bundle β”‚
β”‚ uninstall BUNDLE [--user] β”‚ Uninstall by registered bundle name β”‚
β”‚ update BUNDLE [-o FILE] β”‚ Rebuild a registered bundle β”‚
β”‚ export SOURCE -o FILE β”‚ Copy a verified bundle for sharing β”‚
β”‚ verify BUNDLE [--signer IDENTITY] [--require-sig… β”‚ Verify integrity and authenticity β”‚
β”‚ keygen -o FILE β”‚ Generate Reticulum identity for signing β”‚
β”‚ info BUNDLE β”‚ Show bundle metadata β”‚
β”‚ list [bundles|installed] β”‚ List registry β”‚
β”‚ doctor β”‚ Check environment health β”‚
β”‚ completion install β”‚ Install shell completions β”‚
β”‚ help [COMMAND] [-i] β”‚ Interactive or per-command help β”‚
β”‚ register-windows β”‚ Register .opip association and context menus β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Global flags: --no-color, --no-interactive / -y, --data-dir, --version.

Remember a per-bundle install destination after opip install --target DIR (prompted when interactive), or use --remember-target / opip dest set NAME PATH. Later installs reuse that path when --target is omitted.

opip Environment

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Variable β”‚ Purpose β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ OPIPDATADIR β”‚ State directory (same as --data-dir) β”‚
β”‚ OPIP_JOBS β”‚ Default parallel downloads for create β”‚
β”‚ OPIP_PYTHON β”‚ Default --python for create β”‚
β”‚ OPIP_PLATFORM β”‚ Default --platform for create β”‚
β”‚ OPIP_PUBLISHER β”‚ Default --publisher for create β”‚
β”‚ OPIP_IDENTITY β”‚ Default --identity path for create β”‚
β”‚ OPIP_SIGNER β”‚ Default --signer for verify and install β”‚
β”‚ OPIP_COLOR β”‚ auto, always, or never β”‚
β”‚ OPIPNOCOLOR β”‚ Disable color when set β”‚
β”‚ OPIPFORCECOLOR β”‚ Force color when set β”‚
β”‚ OPIPNOINTERACTIVE β”‚ Disable prompts when set β”‚
β”‚ NO_COLOR β”‚ Standard. Disables colors when set β”‚
β”‚ FORCE_COLOR β”‚ Standard. Enables colors when set β”‚
β”‚ CI β”‚ disables prompts and color unless FORCE_COLOR β”‚
β”‚ PIPRNSCONFIG β”‚ pip-rns config directory. aliases are resolved for rns:// installs β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Shell Completions

T282828
pip-rns completion install
opip completion install
T8b949e# or pick a shell explicitly:
pip-rns completion install --shell zsh


Manual copy (same destinations):

T282828
T8b949e# Bash
cp completions/pip-rns.bash ~/.local/share/bash-completion/completions/
cp completions/opip.bash ~/.local/share/bash-completion/completions/
T8b949e# ZSH
cp completions/_pip-rns ~/.local/share/zsh/site-functions/
cp completions/_opip ~/.local/share/zsh/site-functions/
T8b949e# Fish
cp completions/pip-rns.fish ~/.local/share/fish/vendor_completions.d/
cp completions/opip.fish ~/.local/share/fish/vendor_completions.d/


Man Pages

T282828
cp man/man1/pip-rns.1 ~/.local/share/man/man1/
cp man/man1/pipx-rns.1 ~/.local/share/man/man1/
cp man/man1/opip.1 ~/.local/share/man/man1/

Tests

T282828
python -m tests.test_runner
python -m tests.test_runner -v
python -m tests.test_runner -f opip

T8b949e# Optional live tests (requires RNS, 60+ seconds):
Te6edf3PIP_RNS_TEST_LIVETff7b72=T79c0ff1 python -m tests.test_runner -f live


The test runner adds src/ to PYTHONPATH automatically. Optional live tests are skipped unless PIPRNSTEST_LIVE=1 is set.

License

BSD 2-Clause. See LICENSE.

Served by rngit 1.5.4 - Generated in 0.08s